#pragma once
#include "RenderingPrefix.h"
namespace Alice
{
    class Scene;
    class PrimitiveSceneProxy;
    class PrimitiveComponent;
    class CGICommandListBase;
    class PrimitiveSceneInfo
    {
    public:
        Scene*mScene;
        PrimitiveSceneProxy* mPrimitiveSceneProxy;
        PrimitiveComponent* mPrimitiveComponent;
        /** The primitive's static meshes. */
        std::vector<class FStaticMeshBatch*> mStaticMeshes;
        /** The primitive's cached mesh draw commands infos for all static meshes. Kept separately from StaticMeshes for cache efficiency inside InitViews. */
        std::vector<class FCachedMeshDrawCommandInfo*> mStaticMeshCommandInfos;

        /** The primitive's static mesh relevances. Must be in sync with StaticMeshes. Kept separately from StaticMeshes for cache efficiency inside InitViews. */
        std::vector<class FStaticMeshBatchRelevance*> mStaticMeshRelevances;
        PrimitiveSceneInfo(PrimitiveComponent*inPrimitiveComponent,Scene*inScene);
        /** Creates cached mesh draw commands for all meshes. */
        static void CacheMeshDrawCommands(Scene* Scene, std::vector<PrimitiveSceneInfo*> SceneInfos);
        /** Adds the primitive's static meshes to the scene. */
        static void AddStaticMeshes(CGICommandListBase& RHICmdList, Scene* inScene, std::vector<PrimitiveSceneInfo*> inSceneInfos, bool bCacheMeshDrawCommands = true);
    };
}